
package com.wulian.user.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.wulian.common.dto.CarSysUserDto;
import com.wulian.common.dto.SysUserDto;
import com.wulian.common.dto.UserInfo;
import com.wulian.common.entity.AppResultMoudel;
import com.wulian.common.entity.SysUser;
import com.wulian.common.util.Query;
import com.wulian.common.vo.ResultMoudel;
import com.wulian.common.vo.UserVO;

import java.util.List;
import java.util.Map;

/**
 * @author Administrator
 * @date 2017/10/31
 */
public interface SysUserService extends IService<SysUser> {
    /**
     * 根据用户名查询用户角色信息
     *
     * @param username 用户名
     * @return userVo
     */
    UserVO findUserByUsername(Map<String, Object> paramMap);

    /**
     * 分页查询用户信息（含有角色信息）
     *
     * @param query 查询条件
     * @param userVO
     * @return
     */
    Page selectWithRolePage(Query query, UserVO userVO);

    /**
     * 查询用户信息
     *
     * @param userVo 角色名
     * @return userInfo
     */
    UserInfo findUserInfo(UserVO userVo);

    /**
     * 保存验证码
     *  @param randomStr 随机串
     * @param imageCode 验证码*/
    void saveImageCode(String randomStr, String imageCode);

    /**
     * 删除用户
     * @param sysUser 用户
     * @return boolean
     */
    Boolean deleteUserById(SysUser sysUser,SysUser updateUser);

    /**
     * 更新当前用户基本信息
     * @param userDto 用户信息
     * @param username 用户名
     * @return Boolean
     */
    ResultMoudel updateUserInfo(SysUserDto userDto, String username);

    /**
     * 更新指定用户信息
     * @param userDto 用户信息
     * @param username 用户信息
     * @return
     */
    Boolean updateUser(SysUserDto userDto, String username);

    /**
     * 通过手机号查询用户信息
     * @param mobile 手机号
     * @return 用户信息
     */
    UserVO findUserByMobile(String mobile);

    /**
     * 发送验证码
     * @param mobile 手机号
     * @return Result
     */
    ResultMoudel sendSmsCode(String mobile);

    /**
     * 通过openId查询用户
     * @param openId openId
     * @return 用户信息
     */
    UserVO findUserByOpenId(String openId);

    /**
     * 通过ID查询用户信息
     * @param id 用户ID
     * @return 用户信息
     */
    UserVO selectUserVoById(Integer id);

    /**
     * 通过ID更改用户状态
     * @param user
     * @return boolean
     */
    ResultMoudel updateUserStatus(SysUser user);

    /**
     * 通过workNumberID更改获取员工表中的机构id
     * @param workNumber
     * @return Long
     */
    Long selectempDeptIdByWorkNumber(String workNumber);

    /**
     * 通过workNumber修改机构
     *
     * @param sysUser
     * @return success/false
     */
    Boolean updateDeptIdByWorkNumber(SysUser sysUser);
    
    /**
     * 
    * @Title: login 
    * @Description: TODO(用户登录) 
    * @param @param userVo
    * @param @return    设定文件 
    * @return ResultMoudel    返回类型 
    * @throws 
    * @author 马志豪
    * @date 2019年9月19日 下午2:08:39 
    * @version V1.0
     */
    ResultMoudel login(UserVO userVo);

    /**
     * 功能描述: <br>
     * 〈手机端登录〉
     * @Param:
     * @Return:
     * @Author: caifulin
     * @Date: 2020/5/6
     */
    AppResultMoudel loginByApp(UserVO userVo);
    /**
     * 
        * @Title: getUserInfoMap
        * @Description: TODO(获取用户ID和nameMap)
        * @param @return    参数
        * @return Map<String,String>    返回类型
    	* @author 李东旭  
    	* @date 2019年12月19日  
        * @throws
     */
    Map<String,String> getUserInfoMap();
    /**
     * 
        * @Title: updateRedis
        * @Description: TODO(更新缓存信息)
        * @param     参数
        * @return void    返回类型
    	* @author 李东旭  
    	* @date 2019年12月19日  
        * @throws
     */
	void updateRedis();

    List<SysUser> getUsersByName(Map<String, Object> name);

	ResultMoudel updatePassword(SysUserDto userDto);

    ResultMoudel sendSms( UserVO userVo);

    ResultMoudel updatePasswordByApp(UserVO userVo);

    ResultMoudel sendInspectionSms(UserVO userVo);

    /**
     * 功能描述: <br>
     * 〈查询公司下的人员〉
     * @Param:
     * @Return:
     * @Author: caifulin
     * @Date: 2020/12/3
     */
    List<SysUser> queryUserByCompanyId(Integer companyId,Map<String,Object> param);

    /**
     * 功能描述: <br>
     * 〈初始化密碼〉
     * @Param:
     * @Return:
     * @Author: caifulin
     * @Date: 2020/7/17
     */
    ResultMoudel initPassword(UserInfo currentUser, SysUser userDto);

    /**
     * 功能描述: <br>
     * 更新open_id
     * @Param:
     * @Return:
     * @Author: Hjr
     * @Date: 2021/5/13
     */
    ResultMoudel updateOpenID(SysUser userDto);
}
